import org.junit.Test;

import java.util.Arrays;

/**
 * 数组：Array
 * 数组相当于一堆相同数据类型的数据
 */


public class 数组 {
    //1.数组定义：4种  创建数组初始化[静态初始化：给定值  动态初始化：无给定值]
    @Test
    public void testArray() {
        //注意：数组长度固定，不能改变
        int[] arr1 = new int[4];//java推荐写法 动态初始化
        int arr2[] = new int[4];//c推荐写法 java兼容 动态初始化
        int[] arr3 = {1, 2, 3};//静态初始化数组，元素可以直接使用
        int[] arr4 = new int[]{1, 2, 3};//动态初始化
        //数组:内部存数据叫做数组？
        //从arr3中取2元素      数组名 下标
        System.out.println(arr3[0]);
        //arr3数组长度
        System.out.println(arr3.length);
        //从arr4获取到 第四个元素值
        //System.out.println(arr4[2]);//报错  数组下标越界异常：下标超出数组长度范围范围
/**
 * 数组的迭代（遍历：输出数组所有元素值）三种
 * 1.普通迭代方式：for
 * 2.增强for方式：推荐
 * 3.工具类：Arrays
 */
    }
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组    数组名【下标】
        for(int i=0;i<arr.length;i++){//拿数组下标
            System.out.println(arr[i]);
        }
        //增强for  jdk1.5   遍历数组目的：拿元素值
        //for (int j:arr){//增强for语法：（遍历数据类型 引用：数组名）
        //System.out.println(j);
        //}
        //工具类：Arrays.toString()直接打印数组元素值
        System.out.println(Arrays.toString(arr));

    }
    /**
     *数组扩容：数组长度固定不可改变【可以通过扩容】
     */
    @ Test
    public void testCopy(){
        //字符数组  长度固定：2
        char[] arr={'唐','山'};
        //长度增加为：4
        //扩容：增加为4个     克隆新的数组
        char[] temp=Arrays.copyOf(arr, 4);
        arr=temp;
        arr[2]='工';
        arr[3]='业';
        System.out.println(arr);

    }
    /**
     * 数组输出元素时   会有一些不同【查看数据是否是数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);//输出字符：中国   字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组，自动拼接
        //数值数组
        int[] i={1,2};
        System.out.println(i);//[  I 数据类型@连接符3d82c5f3地址值
    }
    /**
     * 冒号排序：双层for循环使用  外层for执行一次，执行全部
     */
    @Test
    public void bubbleSort(){
        //静态初始化数组
        int[] arr={3,6,4,1}; //1,3,4,6
        //外层for  i=0,1,2    3轮
        for(int i=0;i<arr.length;i++){
            //内层for控制次
            for(int j=0;j<arr.length-1